﻿#ifndef __SS_THEODOLITE_CAMERA_H__
#define __SS_THEODOLITE_CAMERA_H__
#include "ssCamera.h"
#include "../../3dMath/ssAngle.h"


namespace StarSeeker
{

class ssTheodoliteCamera : public ssCamera
{
public:
	ssTheodoliteCamera(void);
	~ssTheodoliteCamera(void);
	//获取焦距
	ssfloat GetFocus() {return m_fFocus;}
	//获取方向
	ssFLOAT3X * GetDirection() {return &m_Direction;}
	//获取眼睛的位置
	ssFLOAT3X * GetEye() {return &m_posEye;}
	//获取视口坐标,参数三维世界坐标,返回是否在屏幕范围内
	//bool GetViewPortCoord(D3DXVECTOR3 *pIn, D3DXVECTOR2 *pOut);
	//设置视图矩阵
	virtual void SetViewMatrix();
	//标记检测
	bool hasDirty();
protected:
	//改变水平角度
	void ChangeHorizontalAngle(ssfloat fVal);
	//改变垂直角度
	void ChangeVerticalAngle(ssfloat fVal);
	//计算视图矩阵
	void LookAtRH(ssFLOAT4x4X *pOut, ssFLOAT3X *pEye, ssFLOAT3X *pAt, ssFLOAT3X *pUp);


	ssFLOAT3X			m_posLookat;		//看的目标位置
	ssFLOAT3X			m_posEye;			//眼睛所在位置
	ssFLOAT3X			m_posUp;			//摆放方向
	ssAngle				m_fHorAngle;		//水平角度(XY平面上与Y的夹角)
	ssAngle				m_fVerAngle;		//垂直角度(与xy平面的夹角)
	ssfloat				m_fFocus;			//焦距
	ssfloat				m_fHorRadius;		//水平(XY平面)的半径
	ssFLOAT3X			m_Direction;		//相机方向
	bool				m_transformDirty;	//变换计算标记
};

}
#endif
